/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo.DTO;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import logica.util.Perfil;
import logica.util.ProfilesUtil;

/**
 * Usando el patron de factoria se ha creado una clase que lleva el control de las transformaciones
 * de objetos del modelo a DTOs
 *
 * @version 1.0
 * @author Ion B. Padilla
 */
public class DTOFactory {
    /**
     * Metodo para convertir una lista de DTOPerfilAlumno en PerfilesAlumnos
     * @param lista La lista de los Alumnos con sus perfiles
     */
    public PerfilesAlumnos fromDTOPerilAlumno2PerfilesAlumnos(List<DTOPerfilAlumno> lista) {
        ArrayList<String> nPerfiles;
        ProfilesUtil prUtile = ProfilesUtil.getInstance();  
        ArrayList<PerfilAlumno> perfiles = new ArrayList<PerfilAlumno>();
        Iterator iterador = lista.iterator();
        while (iterador.hasNext()) {
            int i = 0;
            DTOPerfilAlumno alumno = (DTOPerfilAlumno) iterador.next();
            nPerfiles = new ArrayList<String>();
            Iterator iPUtil = prUtile.getIterator();
            while (iPUtil.hasNext()) {
                Perfil perfil = (Perfil) iPUtil.next();
                if (alumno.getPerfil()[i] == 0.0) {
                    nPerfiles.add(perfil.getProfile(0));
                }
                if (alumno.getPerfil()[i] == 1.0) {
                    nPerfiles.add(perfil.getProfile(1));
                }
                if (alumno.getPerfil()[i] == 2.0) {
                    nPerfiles.add(perfil.getProfile(2));
                }
                i++;
            }
            perfiles.add(new PerfilAlumno(alumno.getNombre(), nPerfiles));
        }
        return new PerfilesAlumnos(perfiles);

    }

    /**
     * Transforma un DTOPerfilAlumno en un PerfilAlumno
     * @param alumno Un alumno con su perfil
     */
    public PerfilAlumno fromDTOPerilAlumno2PerfileAlumno(int noesta,DTOPerfilAlumno alumno) {
        ArrayList<String> nPerfiles;
        ProfilesUtil prUtile = ProfilesUtil.getInstance();
        Iterator iPUtil = prUtile.getIterator();
        int i = 0;
        nPerfiles = new ArrayList<String>();
        if (noesta==1){         
           if (alumno.getPerfil()[i] == 0.0) {
                nPerfiles.add("No esta");
           } 
           return new PerfilAlumno(alumno.getNombre(), nPerfiles);
        }
      else{
        while (iPUtil.hasNext()) {
            Perfil perfil = (Perfil) iPUtil.next();
            if (alumno.getPerfil()[i] == 0.0) {
                nPerfiles.add(perfil.getProfile(0));
            }
            if (alumno.getPerfil()[i] == 1.0) {
                nPerfiles.add(perfil.getProfile(1));
            }
            if (alumno.getPerfil()[i] == 2.0) {
                nPerfiles.add(perfil.getProfile(2));
            }
            i++;
        }
        return new PerfilAlumno(alumno.getNombre(), nPerfiles);
        }
    }

  
    /**
     * Metodo para juntar una serie de listas por cada perfil en una sola lista que contenga nombres y todos los perfiles
     * @param listaPerfiles lista de las listas de los perfiles unicos
     */
    public ArrayList<DTOPerfilAlumno> juntarPerfiles(ArrayList<ArrayList<DTOPerfilUnicoAlumno>> listaPerfiles) {
        ArrayList<DTOPerfilAlumno> lista=new ArrayList<DTOPerfilAlumno>();
        DTOPerfilAlumno perfilTmp;
        for(int j=0;j<listaPerfiles.get(0).size();j++){
            perfilTmp=new DTOPerfilAlumno(listaPerfiles.get(0).get(j).getNombre(),listaPerfiles.size());
            for (int i=0;i<listaPerfiles.size();i++){
                perfilTmp.add(listaPerfiles.get(i).get(j).getPerfil());
            }
            lista.add(perfilTmp);
        }
        return lista;
    }

    public DTOPerfilAlumno juntarPerfil(ArrayList<DTOPerfilUnicoAlumno> listaPerfiles,String nombre) {
        DTOPerfilAlumno perfilTmp= new DTOPerfilAlumno(nombre,listaPerfiles.size());      
        for (int i=0;i<listaPerfiles.size();i++){
                perfilTmp.add(listaPerfiles.get(i).getPerfil());
            }
        return perfilTmp;
    }

}
